/*
 * FlipperFisica.cpp
 *
 *  Created on: 10/11/2013
 *      Author: Juliansci
 */

#include "FlipperFisica.h"

FlipperFisica::FlipperFisica(b2World* world, float x, float y, float ancho, float alto, string tipo, bool sentido) : EntidadFisica(tipo) {

	//defino el sentido al principio ya que me determina parte de la creacion del objeto:
	this->esFlipperDerecho = sentido;
	float eje = 0;
	if (this->esFlipperDerecho){
		eje +=6;
	}
	else{
		eje -=6;
	}
	b2BodyDef* defBodyCuadradito = new b2BodyDef();
	defBodyCuadradito->position.Set(x+eje, y);
	b2Body* cuadradito = world->CreateBody(defBodyCuadradito);

	b2PolygonShape formaCuadradito;
	formaCuadradito.SetAsBox(0.5f, 0.5f);
	b2FixtureDef* fixtureCuadradito = new b2FixtureDef();
	fixtureCuadradito->density = 0.0f;
	fixtureCuadradito->shape = &formaCuadradito;
	fixtureCuadradito->friction = 0.6f;
	cuadradito->CreateFixture(fixtureCuadradito);

	//balancin
	this->definicionCuerpoFisico->position.Set(x, y);
	this->definicionCuerpoFisico->angle = 0;
	this->definicionCuerpoFisico->type = b2_dynamicBody;
	this->cuerpoFisico = world->CreateBody(definicionCuerpoFisico);

	b2PolygonShape box;
	box.SetAsBox(ancho/2, alto/2);

	this->fixture = new b2FixtureDef();
	this->fixture->shape = &box;
	this->fixture->density = 0.8f;

	this->cuerpoFisico->CreateFixture(this->fixture);

	b2RevoluteJointDef jd;

	jd.bodyA = cuadradito;
	jd.localAnchorB.SetZero();
	jd.enableMotor = true;
	jd.maxMotorTorque = 105000.0f;
	jd.enableLimit = true;
	jd.motorSpeed = 250.0f;


	b2Vec2 anclaje(0.0f, 0.0f);

	jd.localAnchorA = anclaje;


	jd.bodyB = this->cuerpoFisico;

	if (this->esFlipperDerecho){
		b2Vec2 anclaje(0.0f, 0.0f);
		jd.lowerAngle = -35.0f * b2_pi / 180.0f;
		jd.upperAngle = 10.0f * b2_pi / 180.0f;
		b2Vec2 anclaje2(6.0f, 0.0f);
		jd.localAnchorB = anclaje2;
		jd.localAnchorA = anclaje;
	}
	else{
		b2Vec2 anclaje(-0.0f, 0.0f);
		jd.lowerAngle = -10.0f * b2_pi / 180.0f;
		jd.upperAngle = 35.0f * b2_pi / 180.0f;
		b2Vec2 anclaje2(-6.0f, 0.0f);
		jd.localAnchorB = anclaje2;
		jd.localAnchorA = anclaje;
	}
	this->joint = (b2RevoluteJoint*)world->CreateJoint(&jd);

	this->guardarInformacionDeEntidad();
	this->alto = alto;
	this->ancho = ancho;
	this->activado = false;



}

void FlipperFisica::activarFlipper(){
	this->activado = true;
}


void FlipperFisica::aplicarFuerzasFisicas(){
	if (this->activado){
		
		if (this->esFlipperDerecho){
			this->joint->SetMotorSpeed(-200.0f);
		}

		else if (!this->esFlipperDerecho){
			this->joint->SetMotorSpeed(200.0f);
		}

		contador++;
		if (contador > 25){
			this->activado=false;
		}
	}
	else{

		if (this->esFlipperDerecho){
			this->joint->SetMotorSpeed(50.0f);
		}
		if (!this->esFlipperDerecho){
			this->joint->SetMotorSpeed(-50.0f);
		}
		contador =0;
	}
}

FlipperFisica::~FlipperFisica() {
	// TODO Auto-generated destructor stub
}

